package cn.collection.set;

import java.util.Comparator;
import java.util.TreeSet;

public class Demo04 {
    /*
    3.4比较器排序Comparator的使用【应用】
案例需求

存储老师对象并遍历，创建TreeSet集合使用带参构造方法
要求：按照年龄从小到大排序，年龄相同时，按照姓名的字母顺序排序
实现步骤

用TreeSet集合存储自定义对象，带参构造方法使用的是比较器排序对元素进行排序的
比较器排序，就是让集合构造方法接收Comparator的实现类对象，重写compare(T o1,T o2)方法
重写方法时，一定要注意排序规则必须按照要求的主要条件和次要条件来写


3.5两种比较方式总结【理解】
    两种比较方式小结
    自然排序: 自定义类实现Comparable接口,重写compareTo方法,根据返回值进行排序
    比较器排序: 创建TreeSet对象的时候传递Comparator的实现类对象,重写compare方法,根据返回值进行排序
    在使用的时候,默认使用自然排序,当自然排序不满足现在的需求时,必须使用比较器排序
    两种方式中关于返回值的规则
    如果返回值为负数，表示当前存入的元素是较小值，存左边
    如果返回值为0，表示当前存入的元素跟集合中元素重复了，不存
    如果返回值为正数，表示当前存入的元素是较大值，存右边
    * */
    public static void main(String[] args) {
        // TreeSet<Student> students = new TreeSet<>(new Comparator<Student>() {
        //     @Override
        //     public int compare(Student o1, Student o2) {
        //         //o1表示现在要存入的那个元素
        //         //o2表示已经存入到集合中的元素
        //
        //         //主要条件
        //         int result = o1.getAge() - o2.getAge();
        //         //次要条件
        //         result = result == 0 ? o1.getName().compareTo(o2.getName()) : result;
        //         return result;
        //     }
        // });

        TreeSet<Student> students = new TreeSet<>((o1,o2)-> {
            //主要条件
            int result = o1.getAge() - o2.getAge();
            //次要条件
            result = result == 0 ? o1.getName().compareTo(o2.getName()) : result;
            return result;
        });
        Student s1 = new Student("zhangsan",28);
        Student s2 = new Student("lisi",27);
        Student s3 = new Student("wangwu",29);
        Student s111 = new Student("zhaoliuaa",33);
        Student s4 = new Student("zhaoliu",33);
        Student s5 = new Student("qianqi",30);
        students.add(s1);
        students.add(s2);
        students.add(s3);
        students.add(s4);
        students.add(s5);
        students.add(s111);

        //遍历集合
        for (Student student : students) {
            System.out.println(student);
        }
    }
}
